package scan

import (
	"strconv"
	"strings"
)

func parsePort(port string) {

	switch port {
	case "top500":
		portlist = default_port
		return
	case "top100":
		portlist = top100_port
		return
	case "top1000":
		portlist = top1000_port
		return
	}
	if len(portlist) > 0 { //是否有特定端口
		return
	}

	for _, p := range strings.Split(port, ",") {
		if p == "" {
			continue
		}

		if strings.Count(p, "-") == 1 { //范围
			start := strings.Split(p, "-")[0]
			end := strings.Split(p, "-")[1]
			startNum, _ := strconv.Atoi(start)
			endNum, _ := strconv.Atoi(end)
			if startNum > endNum {
				continue
			}
			if startNum == endNum {
				portlist = append(portlist, start)
				continue
			}
			for i := startNum; i <= endNum; i++ {
				portlist = append(portlist, strconv.Itoa(i))
			}
		}

		if strings.Count(p, "-") == 0 {
			pNun, _ := strconv.Atoi(p)
			if pNun < 65535 {
				portlist = append(portlist, p)
			}
		}

	}
}

var (
	default_port = []string{"80", "443", "8080", "3306", "22", "3389", "445", "135", "21", "6379", "53", "8009", "1433", "8443", "25", "23", "9200", "9443", "9000", "2181", "110", "995", "143", "902", "5432", "27017", "8081", "8161", "7001", "1521", "8082", "9090", "8089", "4443", "7443", "10443", "9001", "8001", "4430", "8083", "8084", "8087", "5000", "8002", "50000", "12345", "65432", "54321", "18080", "28080", "3000", "6667", "9091", "10000", "2222", "8888", "7777", "6666", "4444", "7860", "7890", "49152", "179", "389", "1389", "587", "990", "1080", "1099", "3128", "20880", "5631", "6000", "6001", "5900", "5901", "6881", "8086", "8899", "8010", "8011", "27018", "27019", "6789", "6800", "3260", "5001", "427", "5671", "465", "993", "9300", "88", "89", "7222", "123", "9002", "8003", "60010", "1723", "4433", "5222", "49155", "49156", "49157", "8099", "9080", "22345", "6443", "8008", "1701", "82", "9081", "2103", "5443", "2105", "8889", "2107", "10001", "49158", "84", "139", "3022", "8025", "8098", "8880", "83", "7070", "3120", "8863", "5555", "9082", "7000", "8100", "15672", "554", "8180", "104", "5672", "8021", "10002", "808", "8093", "8181", "8092", "49665", "86", "8060", "8106", "10080", "8050", "10022", "7002", "9696", "9003", "5060", "9998", "18082", "11443", "18081", "994", "4431", "9010", "8111", "888", "18083", "8070", "8022", "800", "8188", "49159", "8005", "7005", "8800", "8097", "7004", "9101", "1883", "9092", "20000", "5100", "8006", "2443", "90", "8101", "30001", "8004", "6060", "801", "8094", "9102", "8873", "1028", "5050", "9021", "8989", "8096", "6581", "7080", "9070", "8237", "9012", "10019", "2000", "8887", "8015", "1000", "8103", "444", "3002", "8012", "2049", "9009", "9099", "18443", "999", "15001", "9004", "91", "7010", "8686", "873", "9005", "8848", "1026", "9006", "8013", "5061", "8881", "7003", "4032", "49160", "8801", "10086", "7788", "9100", "9035", "7020", "33060", "8007", "7081", "5284", "8200", "9900", "6080", "8018", "9023", "16000", "8026", "9083", "22222", "9020", "9037", "1025", "50001", "8600", "8102", "8031", "8072", "9207", "6500", "8105", "18888", "8282", "20001", "4000", "3333", "8107", "1234", "44344", "51443", "9011", "3443", "880", "5004", "9994", "3001", "2121", "8078", "66", "9500", "20443", "49161", "22000", "8900", "7060", "8016", "8383", "9084", "9201", "9208", "1027", "8805", "8033", "8108", "9527", "10008", "9212", "30000", "8114", "10024", "9600", "8019", "8066", "37777", "8444", "8445", "10025", "9213", "8079", "7090", "4002", "805", "9098", "10082", "8095", "10003", "18091", "18089", "49163", "8040", "9205", "9027", "2022", "8890", "8280", "9089", "3690", "8104", "9095", "9988", "3080", "8381", "3307", "4321", "5678", "61616", "15000", "9210", "8014", "8024", "9060", "9093", "1688", "1029", "8883", "8071", "8075", "9088", "50022", "10005", "9051", "99", "8828", "9209", "18000", "4343", "9030", "8446", "20080", "7778", "9086", "40029", "7021", "14888", "1030", "20002", "38080", "28443", "9008", "3299", "3478", "92", "8028", "8112", "30004", "12443", "2082", "9508", "5431", "33069", "49167", "9022", "9211", "18088", "10127", "8300", "8500", "1024", "8063", "8808", "7500", "8384", "8150", "8991", "4369", "22346", "10021", "5002", "2020", "8802", "8055", "8068", "8065", "10011", "6005", "9007", "18002", "7100", "8052", "8029", "60443", "9085", "7800", "9898", "7051", "9901", "10007", "9019", "2052", "2095", "20022", "3390", "30003", "10010", "30002", "8110", "8113", "7024", "8182", "8177", "8189", "10125", "9026", "49165", "33890", "4001", "5566", "7006", "50004", "16443", "8034", "8051", "8186", "30080", "9016", "8902", "8980", "9916", "8585", "10012", "8023", "9014", "8846", "7999", "10051", "30025", "6002", "10081", "10101", "60000", "9105", "18090", "222", "2333", "8302", "6100", "8845", "4432", "9015", "2086", "2601", "13389", "50006", "7022", "19999", "7016", "7082", "8017", "8046", "8822", "11000", "6003", "7019", "9991", "9040", "8041", "9444", "2080", "8184", "8191", "8064", "8183", "8843", "7023", "13306", "10033", "2323", "6380", "8291"}
	top100_port  = []string{"80", "443", "8080", "3306", "22", "3389", "445", "135", "21", "6379", "53", "8009", "1433", "8443", "25", "23", "9200", "9443", "9000", "2181", "110", "995", "143", "902", "5432", "27017", "8081", "8161", "7001", "1521", "8082", "9090", "8089", "4443", "7443", "10443", "9001", "8001", "4430", "8083", "8084", "8087", "5000", "8002", "50000", "12345", "65432", "54321", "18080", "28080", "3000", "6667", "9091", "10000", "2222", "8888", "7777", "6666", "4444", "7860", "7890", "49152", "179", "389", "1389", "587", "990", "1080", "1099", "3128", "20880", "5631", "6000", "6001", "5900", "5901", "6881", "8086", "8899", "8010", "8011", "27018", "27019", "6789", "6800", "3260", "5001", "427", "5671", "465", "993", "9300", "88", "89", "7222", "123", "9002", "8003", "60010", "1723"}
	top1000_port = []string{"80", "443", "8080", "3306", "22", "3389", "445", "135", "21", "6379", "53", "8009", "1433", "8443", "25", "23", "9200", "9443", "9000", "2181", "110", "995", "143", "902", "5432", "27017", "8081", "8161", "7001", "1521", "8082", "9090", "8089", "4443", "7443", "10443", "9001", "8001", "4430", "8083", "8084", "8087", "5000", "8002", "50000", "12345", "65432", "54321", "18080", "28080", "3000", "6667", "9091", "10000", "2222", "8888", "7777", "6666", "4444", "7860", "7890", "49152", "179", "389", "1389", "587", "990", "1080", "1099", "3128", "20880", "5631", "6000", "6001", "5900", "5901", "6881", "8086", "8899", "8010", "8011", "27018", "27019", "6789", "6800", "3260", "5001", "427", "5671", "465", "993", "9300", "88", "89", "7222", "123", "9002", "8003", "60010", "1723", "4433", "5222", "49155", "49156", "49157", "8099", "9080", "22345", "6443", "8008", "1701", "82", "9081", "2103", "5443", "2105", "8889", "2107", "10001", "49158", "84", "139", "3022", "8025", "8098", "8880", "83", "7070", "3120", "8863", "5555", "9082", "7000", "8100", "15672", "554", "8180", "104", "5672", "8021", "10002", "808", "8093", "8181", "8092", "49665", "86", "8060", "8106", "10080", "8050", "10022", "7002", "9696", "9003", "5060", "9998", "18082", "11443", "18081", "994", "4431", "9010", "8111", "888", "18083", "8070", "8022", "800", "8188", "49159", "8005", "7005", "8800", "8097", "7004", "9101", "1883", "9092", "20000", "5100", "8006", "2443", "90", "8101", "30001", "8004", "6060", "801", "8094", "9102", "8873", "1028", "5050", "9021", "8989", "8096", "6581", "7080", "9070", "8237", "9012", "10019", "2000", "8887", "8015", "1000", "8103", "444", "3002", "8012", "2049", "9009", "9099", "18443", "999", "15001", "9004", "91", "7010", "8686", "873", "9005", "8848", "1026", "9006", "8013", "5061", "8881", "7003", "4032", "49160", "8801", "10086", "7788", "9100", "9035", "7020", "33060", "8007", "7081", "5284", "8200", "9900", "6080", "8018", "9023", "16000", "8026", "9083", "22222", "9020", "9037", "1025", "50001", "8600", "8102", "8031", "8072", "9207", "6500", "8105", "18888", "8282", "20001", "4000", "3333", "8107", "1234", "44344", "51443", "9011", "3443", "880", "5004", "9994", "3001", "2121", "8078", "66", "9500", "20443", "49161", "22000", "8900", "7060", "8016", "8383", "9084", "9201", "9208", "1027", "8805", "8033", "8108", "9527", "10008", "9212", "30000", "8114", "10024", "9600", "8019", "8066", "37777", "8444", "8445", "10025", "9213", "8079", "7090", "4002", "805", "9098", "10082", "8095", "10003", "18091", "18089", "49163", "8040", "9205", "9027", "2022", "8890", "8280", "9089", "3690", "8104", "9095", "9988", "3080", "8381", "3307", "4321", "5678", "61616", "15000", "9210", "8014", "8024", "9060", "9093", "1688", "1029", "8883", "8071", "8075", "9088", "50022", "10005", "9051", "99", "8828", "9209", "18000", "4343", "9030", "8446", "20080", "7778", "9086", "40029", "7021", "14888", "1030", "20002", "38080", "28443", "9008", "3299", "3478", "92", "8028", "8112", "30004", "12443", "2082", "9508", "5431", "33069", "49167", "9022", "9211", "18088", "10127", "8300", "8500", "1024", "8063", "8808", "7500", "8384", "8150", "8991", "4369", "22346", "10021", "5002", "2020", "8802", "8055", "8068", "8065", "10011", "6005", "9007", "18002", "7100", "8052", "8029", "60443", "9085", "7800", "9898", "7051", "9901", "10007", "9019", "2052", "2095", "20022", "3390", "30003", "10010", "30002", "8110", "8113", "7024", "8182", "8177", "8189", "10125", "9026", "49165", "33890", "4001", "5566", "7006", "50004", "16443", "8034", "8051", "8186", "30080", "9016", "8902", "8980", "9916", "8585", "10012", "8023", "9014", "8846", "7999", "10051", "30025", "6002", "10081", "10101", "60000", "9105", "18090", "222", "2333", "8302", "6100", "8845", "4432", "9015", "2086", "2601", "13389", "50006", "7022", "19999", "7016", "7082", "8017", "8046", "8822", "11000", "6003", "7019", "9991", "9040", "8041", "9444", "2080", "8184", "8191", "8064", "8183", "8843", "7023", "13306", "10033", "2323", "6380", "8291", "10031", "55555", "8127", "6688", "8787", "4445", "9502", "488", "6021", "63389", "8882", "10009", "10132", "20200", "7007", "7835", "7878", "4080", "9191", "18099", "9018", "18001", "7782", "8885", "7018", "9852", "40001", "10023", "40000", "4022", "8201", "9013", "4434", "8073", "9097", "9111", "7801", "2048", "7026", "1031", "8109", "16101", "8115", "30031", "8666", "8813", "7009", "22022", "8116", "8442", "10013", "8120", "8898", "100", "8804", "8044", "8131", "8151", "1022", "10052", "10014", "9123", "8123", "9094", "10157", "10234", "18084", "7083", "8048", "10130", "9533", "9728", "9888", "7013", "9302", "541", "10032", "10006", "8906", "8421", "10142", "10155", "30443", "8043", "9031", "9980", "7012", "8125", "9061", "9282", "49153", "7071", "10140", "7510", "49176", "30005", "10004", "10020", "5003", "9215", "7008", "10134", "9878", "9043", "9928", "9181", "9033", "9535", "20004", "5005", "11080", "8554", "10030", "11111", "9800", "9875", "50002", "1111", "4081", "8866", "9943", "8130", "5011", "8190", "8806", "8892", "446", "8141", "8688", "8388", "4437", "8334", "9939", "8202", "9303", "1554", "60022", "9700", "3003", "10138", "9122", "9125", "10141", "8864", "9132", "8042", "8911", "9029", "9550", "9520", "1032", "9848", "12321", "8891", "7780", "17001", "8990", "9311", "9997", "5010", "8333", "5280", "6588", "8069", "10099", "10143", "22443", "9112", "9121", "49380", "8129", "9906", "7025", "9990", "20030", "49175", "2223", "30013", "9868", "9866", "8901", "9136", "59999", "8027", "8170", "8393", "8821", "9819", "10216", "12380", "6081", "8076", "8172", "8195", "8410", "8810", "9960", "10128", "19080", "5500", "9963", "94", "8286", "9115", "9516", "9919", "8877", "9504", "830", "9871", "10043", "2200", "60001", "9966", "10131", "10034", "10090", "25001", "6331", "7790", "8045", "8977", "12316", "12001", "8036", "8163", "8541", "8124", "8236", "8543", "9503", "44325", "5223", "3308", "45003", "10089", "20010", "555", "5022", "9222", "20020", "44300", "7700", "442", "8447", "6004", "9310", "7442", "7776", "8128", "4435", "8605", "8126", "8198", "9905", "10058", "8173", "8869", "10133", "8058", "9104", "9189", "9929", "15776", "4118", "6633", "33389", "12580", "30022", "11001", "18011", "9876", "8122", "11027", "65000", "12442", "19090", "8560", "9996", "10083", "44304", "5007", "5858", "8132", "8501", "10077", "3008", "8199", "7074", "9087", "9096", "23306", "45005", "10047", "2021", "4021", "8987", "30006", "50003", "5602", "8222", "10053", "6010", "12002", "5051", "9801", "15006", "16666", "21443", "50005", "9962", "8192", "9526", "9554", "8056", "9120", "8897", "9058", "26", "1720", "3132", "2525", "264", "5225", "9872", "2001", "10035", "4190", "17000", "10062", "30017", "9306", "12000", "10065", "7077", "10015", "9827", "666", "6566", "8035", "8448", "8545", "6011", "9301", "9307", "21280", "30111", "96", "98", "8556", "8336", "9025", "4117", "10029", "16030", "8169", "9312", "11013", "12222", "10048", "60021", "20003", "4004", "8908", "10091", "9218", "9902", "9981", "8602", "8907", "7075", "30008", "8520", "9017", "10042", "17443", "30029", "7905", "8121", "8148", "9628", "9918", "8687", "8920", "9034", "7575", "9066", "7156", "2233", "8306", "43080", "11211", "10050", "3130", "9206", "8988", "7099", "8502", "10060", "18003", "29000", "60023", "9922", "10016", "12370", "9032", "12016", "50080", "5552", "6969", "8385", "9039", "7190", "8054", "15555", "8238", "853", "3100", "4436", "7980", "8160", "8777", "9645", "2221", "2606", "5097", "5269", "9861", "13911", "60002", "12581", "2100", "3131", "8599", "9870", "30007", "8416", "20100", "9202", "21000", "9856", "14000", "9528", "5020", "10094", "6012", "10087", "4100", "6622", "7789", "8193", "10205", "4450", "8935", "7997", "9103", "10100", "10196", "18085", "8840", "51001", "5998", "7767", "8059", "9892", "1444", "8503", "9805", "8067", "8607", "8803", "9449", "9614", "12346", "10085", "9860", "9865", "53389", "61613", "9867", "9869", "12560", "2345", "9680", "20005", "4101", "16061", "4040", "8790", "10037", "10093", "12320", "21001", "620", "8197", "9517", "12360", "8904", "9059", "9798"}
)

var portProtocols = map[string]string{
	"25":    "SMTP",
	"53":    "DNS",
	"110":   "POP3",
	"135":   "RPC服务",
	"137":   "NetBIOS名称服务",
	"138":   "NetBIOS数据报服务",
	"139":   "NetBIOS会话服务",
	"161":   "SNMP",
	"162":   "SNMP-trap",
	"143":   "IMAP",
	"445":   "SMB",
	"465":   "SMTPS",
	"514":   "syslog",
	"993":   "IMAPS",
	"995":   "POP3S",
	"1433":  "数据库|SqlServer",
	"1521":  "数据库|Oracle",
	"1723":  "PPTP",
	"2049":  "NFS",
	"3389":  "RDP",
	"5900":  "VNC",
	"5901":  "VNC",
	"5672":  "RabbitMq",
	"27017": "数据库|MongoDB",
	"2181":  "ZooKeeper",
}
